home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / mapl0831.zip / RCHAT300.MRG < prev    next >
Text File  |  1992-08-31  |  22KB  |  610 lines

  1. * ------------[ BLED merge (c) Ken Goosens ]-------------
  2. * Merge this against E:\RBBS\STOCK\RCHAT300.BAS to produce E:\RBBS\CHAT\RCHAT300.BAS
  3. * E:\RBBS\STOCK\RCHAT300.BAS:  Date 8-28-1990  Size 30163 bytes
  4. * ------------[ Created 08-31-1992 21:16:52 ]------------
  5. * REPLACING old line(s) by new
  6. '
  7. ' RChat300  --  Or, RBBS-Chat, release 3.00.  A character by character
  8. '               internode chat program..
  9. '
  10. '  Not the worlds prettiest, or cleanest code.. but I'm under no illusions..
  11. '
  12. '  Copyright 1989-1990 By John Morris  All Rights Reserved
  13. * ------[ first line different ]------
  14. '  modifications for rbbs17.4 by Pete Eibl
  15. '
  16. '  I'm not a big fan of global variables, but here goes..
  17. '
  18. '  $INCLUDE: 'RBBS-VAR.MOD'   'RBBS-VAR.BAS minus the DEF FN...
  19. '  $DYNAMIC
  20.    DEFINT A - Z
  21.    COMMON Shared /Chat/ DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  22.    COMMON Shared /Chat/ NodesToSquelch$
  23.    COMMON SHARED /ChatField/ ChatActivity$, PagingNode$, PrivateFor$
  24.    COMMON SHARED /ChatField/ ChatInput$, ChatName$, InTrueChat$
  25.    COMMON SHARED /ChatField/ TrueChatIndex$, SavingToDisk$, BBSActivity$
  26. '
  27. * REPLACING old line(s) by new
  28. 59800 ' $SUBTITLE: 'LogNewForChat - Save user info for chat'
  29. ' $PAGE
  30. '
  31. '  NAME    -- LogNewForChat
  32. '
  33. * ------[ first line different ]------
  34. '  INPUTS  -- Zmaxnodes -- needed for creation of RBBSCHAT.DEF
  35. '
  36. '  OUTPUTS -- Updates the node record in RBBSCHAT.DEF with this users
  37. '             name and chat activity (always "I") when the user logs on.
  38. '
  39. '  PURPOSE -- See OUTPUTS. Also, if no RBBSCHAT.DEF is not found, one will be
  40. '             created.
  41. '
  42.       SUB LogNewForChat(ZMaxNodes) STATIC
  43.       CALL FindItX (ZChatFileName$, 9)
  44.       REM ** If "RBBSCHAT.DEF" does not exist, then create it **
  45.  
  46.       IF NOT ZOK THEN
  47.          CALL OpenWrk9 (ZChatFileName$)
  48.          FIELD 9, 128 AS TempNode$
  49.          LSET TempNode$ = SPACE$(128)
  50.          FOR Index = 1 TO ZMaxNodes
  51.             CALL LockIt9 (Index, ZFalse)
  52.          NEXT
  53.       END IF
  54.  
  55.       ChatIndex = ZNodeRecIndex - 1
  56.       CLOSE 9
  57.       CALL OpenWrk9 (ZChatFileName$)
  58.       CALL Field9
  59.       CALL LockIt9 (ChatIndex, ZTrue)
  60.       LSET ChatActivity$ = "I"    ' I means inactive
  61.       LSET PagingNode$ = MKI$(0)
  62.       LSET ChatName$ = SPACE$(31)
  63.  
  64.       IF ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ THEN
  65.          LSET ChatName$ = "SYSOP"
  66.        ELSE
  67.          LSET ChatName$ = ZActiveUserName$
  68.       END IF
  69.  
  70.       LSET ChatInput$ = SPACE$(72)
  71.       LSET InTrueChat$ = "I"
  72.       CALL LockIt9 (ChatIndex, ZFalse)
  73.       CLOSE 9
  74.       END SUB
  75.  
  76. * REPLACING old line(s) by new
  77. 59810 ' $SUBTITLE: 'CBCHECK - Check for a page attempt'
  78. ' $PAGE
  79. '
  80. '  NAME    -- CBCHECK
  81. '
  82. '  INPUTS  -- NONE
  83. '
  84. '  OUTPUTS -- ChatActivity$   Changed to reflect whether or not they
  85. '                             are going to chat
  86. '             WillChat        If WillChat is TRUE, then the user will
  87. '                             automatically be thrust unawares into
  88. '                             chat mode.. They said yes... didn't they?
  89. '
  90. '  PURPOSE -- Check to see if we have been paged from another node
  91. '
  92.       SUB CBCheck(WillChat) STATIC
  93. * ------[ first line different ]------
  94.       WillChat = ZFalse
  95.       ZOutTxt$ = ""
  96.       IsTrueChat = ZFalse
  97.       CALL FindItX (ZChatFileName$, 9)
  98.  
  99.       IF NOT ZOK THEN
  100.          EXIT SUB
  101.       END IF
  102.  
  103.       ChatIndex = ZNodeRecIndex - 1
  104.       CLOSE 9
  105.       CALL OpenWrk9 (ZChatFileName$)
  106.       CALL Field9
  107.       CALL LockIt9 (ChatIndex, ZTrue)
  108.  
  109.       IF ChatActivity$ = "R" THEN   'R means request for chat
  110.          PagerIndex = CVI(PagingNode$)
  111.          CALL RingCaller
  112.          CALL LockIt9 (PagerIndex, ZTrue)
  113.          IsTrueChat = (InTrueChat$ = "A")
  114.          ZOutTxt$ = ChatName$
  115.          CALL TrimTrail (ZOutTxt$, " ")
  116.          CALL NameCaps(ZOutTxt$)
  117.          CALL UpdtCalr("Paged for Chat by " + ZOutTxt$ + " on node" + STR$(PagerIndex), 1)
  118.          CALL QuickTPut( ZOutTxt$ + " is requesting that you join in a chat!", 1)
  119.          ZOutTxt$ = "Do you plan to join the chat (Y/[N])"
  120.          ZSubParm = 1
  121.          CALL TGet
  122.                    IF ZSubParm = -1 THEN
  123.                      CLOSE 9
  124.                       EXIT SUB
  125.                    END IF
  126.          CALL LockIt9 (ChatIndex, ZTrue)
  127.  
  128.                 IF ZNo OR (ZWasQ = 0) THEN
  129.                      LSET ChatActivity$ = "N"   'No, I don't think I'll chat
  130.                   ELSE
  131.                     LSET ChatActivity$ = "Y"   'Yeah, I might just join a chat
  132.                    WillChat = ZTrue
  133.                  END IF
  134.  
  135.  
  136.          CALL LockIt9 (ChatIndex, ZFalse)
  137.       END IF
  138.       CLOSE 9
  139.   END SUB
  140.  
  141. * REPLACING old line(s) by new
  142. 59820 ' $SUBTITLE: 'PageEm - attempt to page another user to chat'
  143. ' $PAGE
  144. '
  145. '  NAME    -- PageEm
  146. '
  147. '  INPUTS  -- ShowOnly         Show whos is on the other nodes only
  148. * ------[ first line different ]------
  149. '             Zmaxnodes    Number of nodes in this system
  150. '
  151. '  OUTPUTS -- HasPaged        -1 exit chat mode
  152. '                              0 don't check for reply to page
  153. '                              1 - Zmaxnodes check for page reply
  154. '
  155. '  PURPOSE -- Page another user on the system and set up for a reply
  156. '             from the other user
  157. '
  158.       SUB PageEm(CurrentNodeIndex, ZMaxNodes, ShowOnly) STATIC
  159.  
  160.       REM ** Page 'Em only needs access to the COMMON variable HasPaged **
  161.       SHARED HasPaged
  162.  
  163.       CALL WhosOn (ZMaxNodes)
  164.       CALL SkipLine(1)
  165.  
  166.         IF ShowOnly THEN
  167.           EXIT SUB
  168.          END IF
  169.  
  170.       ZOutTxt$ = "Which node do you wish to page (1 -" + STR$(ZMaxNodes) + ")" + PRESS.ENTER$
  171.       ZSubParm = 1
  172.       CALL TGet
  173.  
  174.           IF ZWasQ = 0 OR ZSubParm = -1 THEN
  175.             HasPaged = -1
  176.              EXIT SUB
  177.             END IF
  178.  
  179.       CALL CheckInt(ZUserIn$(1))
  180.       CALL Field9
  181.  
  182.       IF ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxnodes AND _
  183.          ZTestedIntValue <> CurrentNodeIndex THEN
  184.          CALL LockIt9 (ZTestedIntValue, ZTrue)
  185.  
  186.              IF ChatActivity$ = "A" THEN        'if other node already
  187.               HasPaged = 0
  188.                END IF
  189.  
  190.          CALL QuickTPut1("Hang on,  I'll let them know you want to chat")
  191.          CALL QuickTPut1("If you don't get an answer within a couple minutes,")
  192.          CALL QuickTPut1("then you probably won't get an answer")
  193.          LSET ChatActivity$ = "R"                        'R means Request
  194.          LSET PagingNode$ = MKI$(CurrentNodeIndex)
  195.          HasPaged = ZTestedIntValue
  196.          CALL LockIt9 (ZTestedIntValue, ZFalse)
  197.         ELSE
  198.          HasPaged = -1
  199.       END IF
  200.  
  201.    END SUB
  202.  
  203. * REPLACING old line(s) by new
  204. 59830 ' $SUBTITLE: 'CBTrueChat - The letter by letter chat'
  205. ' $PAGE
  206. '
  207. '  NAME    -- CBTrueChat
  208. '
  209. * ------[ first line different ]------
  210. '  INPUTS  -- Zmaxnodes
  211. '
  212. '  INTERNAL - NodesToSquelch$      STRING OF NODES NOT TO RECEIVE TEXT FROM
  213. '             HasPaged             NODE (IF ANY) THAT THIS USER PAGED
  214. '             CurrentNodeIndex     NODE RECORD IN "RBBSCHAT.DEF"
  215. '             ChatActivity$        CURRENT STATUS OF EACH NODE
  216. '             PagingNode$          NODE WHICH HAS PAGED THIS ONE
  217. '             ChatInput$           CURRENT TEXT INPUT BY USER FOR CHATTING
  218. '             ChatName$            NAME OF USER ON EACH NODE (NOT CURRENTLY USED)
  219. '             SquelchIt            BOOLEAN - MEANS NODE IS IGNORED
  220. '             ZUserIn$()           USED TO SAVE CURRENT STATUS OF EACH NODE
  221. '                                  THIS INFO IS LATER COMPARED, AND IF THAT
  222. '                                  STATUS IS CHANGED, THEN THE USER IS NOTIFIED
  223. '                                  OF THE CHANGE
  224. '             DoTrueChat           Means we are in a true chat mode, we'll
  225. '                                  only check one node for input
  226. '
  227. '
  228. '  OUTPUTS -- NONE
  229. '
  230. '  PURPOSE -- To allow users to chat between nodes in several different
  231. '             ways.
  232. '
  233.       SUB CBTrueChat(Zmaxnodes) STATIC
  234.  
  235.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  236.       SHARED NodesToSquelch$
  237.  
  238.       CALL SaveUserActivity("C", ZNodeRecIndex, ZFalse)
  239.  
  240.       ZCol = 1
  241.       SendRemote = ZRemoteEcho
  242.       SaveToDisk = ZFalse
  243.       DoTrueChat = ZFalse
  244.       NodesToSquelch$ = ""
  245.       HasPaged = 0
  246.       ChatSubParm = 0
  247.       CALL FindItX (ZChatFileName$, 9)
  248.       IF ZOK THEN
  249.          CurrentNodeIndex = ZNodeRecIndex - 1
  250.          CLOSE 9
  251.          CALL OpenWrk9 (ZChatFileName$)
  252.          CALL Field9
  253.          CALL UpdtCalr("Entered CBTrueCh@ sim at " + TIME$, 1)
  254.          CALL QuickTPut1("Type Ctrl-Q or ESCape for a list of commands")
  255.  
  256.          REDIM TrueChatIndexHold(Zmaxnodes)
  257.  
  258.          CALL LockIt9 (CurrentNodeIndex, ZTrue)
  259.             LowerNode = 1
  260.             UpperNode = Zmaxnodes
  261.          LSET ChatActivity$ = "A"
  262.          LSET TrueChatIndex$ = MKI$(1)
  263.          CALL LockIt9 (CurrentNodeIndex, ZFalse)
  264.  
  265.          REM ** Load in current node status for later comparison **
  266.          FOR LineIndex = 1 TO Zmaxnodes
  267.             CALL LockIt9 (LineIndex, ZTrue)
  268.             ZUserIn$(LineIndex) = ChatActivity$
  269.             REM ** save current index so we don't get a bunch of trash if **
  270.             REM ** a chat is already in progress.                         **
  271.             IF ChatActivity$ = "A" THEN
  272.                TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  273.              ELSE
  274.                TrueChatIndexHold(LineIndex) = 1
  275.             END IF
  276.          NEXT
  277.  
  278.          REM ** Set Autologoff time before we start looping **
  279. '         ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  280.  
  281.          REM ** We are currently getting name from MESSAGES file.. set that up..
  282.          WasA1$ = ZActiveMessageFile$
  283.          ZActiveMessageFile$ = ZOrigMsgFile$
  284.          CALL OpenMsg
  285.          FIELD 1, 128 AS ZMsgRec$
  286.  
  287.          DO 'the wild chat thingie..
  288.  
  289. REM **************************************************************************
  290. REM ******Check for answer to page, or text from other users in chat  ********
  291. REM ******If the other guy has 'page availability' turned off, then   ********
  292. REM ******we simply won't tell this guy.. he won't know the difference********
  293. REM **************************************************************************
  294.             FOR LineIndex = LowerNode TO UpperNode
  295.  
  296.                SquelchIt = ZFalse
  297.                IF LineIndex <> CurrentNodeIndex THEN
  298.  
  299.                   CALL LockIt9 (LineIndex, ZTrue)
  300.                   Index$ = MID$(STR$(LineIndex), 2, 1)
  301.  
  302.                   REM ** Check for answer to page (if a page was done) **
  303.                   IF HasPaged = LineIndex THEN
  304.                      IF ChatActivity$ <> "R" THEN
  305.                         IF ChatActivity$ = "N" THEN
  306.                            CALL QuickTPut("Paged user may not enter chat mode!", 1)
  307.                            HasPaged = 0
  308.                         ELSEIF ChatActivity$ = "Y" THEN
  309.                            HasPaged = 0
  310.                         END IF
  311.                      END IF
  312.                   END IF
  313.  
  314.                   ChatTemp$ = ""
  315.                   NameTemp$ = ""
  316.  
  317.                   REM ** Check for change in node activity              **
  318.                   REM ** In this case, see if someone has left the chat **
  319.                   REM ** node must not be squelched                     **
  320.                   IF NOT SquelchIt THEN
  321.                      IF (ZUserIn$(LineIndex) = "A") AND (ChatActivity$ = "I") THEN
  322.                         GOSUB 59840
  323.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has exited chat mode!", 1)
  324.                         IF DoTrueChat THEN
  325.                            DoTrueChat = ZFalse
  326.                            CALL LockIt9 (CurrentNodeIndex, ZTrue)
  327.                            LSET InTrueChat$ = "I"
  328.                            LSET ChatInput$ = SPACE$(72)
  329.                            LSET TrueChatIndex$ = MKI$(1)
  330.                            CALL LockIt9 (CurrentNodeIndex, ZFalse)
  331.                            REM ** TrueChat over.. start looping thru all nodes
  332.                            LowerNode = 1
  333.                            UpperNode = Zmaxnodes
  334.                         END IF
  335.                      END IF
  336.                      REM ** OR, If someone has joined the chat **
  337.                      IF (ZUserIn$(LineIndex) <> "A") AND (ChatActivity$ = "A") THEN
  338.                         GOSUB 59840
  339.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has entered the chat!", 1)
  340.                         REM ** Save the ring buffer index as they currently see it **
  341.                         TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  342.                      END IF
  343.                   END IF
  344.  
  345.                   REM ** Save new node status (if any) **
  346.                   ZUserIn$(LineIndex) = ChatActivity$
  347.  
  348.                   REM ** If other node is active (& not squelched) check it **
  349.                   IF (ChatActivity$ = "A") AND (NOT SquelchIt) THEN
  350.  
  351.                      OtherNodeInput$ = MID$(ChatInput$, TrueChatIndexHold(LineIndex), 1)
  352.  
  353.                      IF (CVI(TrueChatIndex$) <> TrueChatIndexHold(LineIndex)) THEN
  354.  
  355.                         IF OtherNodeInput$ = CHR$(8) THEN
  356.                            CALL LPrnt(ZLocalBkSp$, 0)
  357.                            CALL PutCom (ZBackSpace$)
  358.                          IF ZCol > 0 THEN
  359.                             ZCol = ZCol - 1
  360.                           END IF
  361.                          ELSEIF OtherNodeInput$ = ZCarriageReturn$ THEN
  362.                            CALL SkipLine(1)
  363.                            ZCol = 1
  364.                          ELSE
  365.                            CALL ColorText(OtherNodeInput$, LineIndex)
  366.                            CALL LPrnt (OtherNodeInput$, 0)
  367.                            CALL PutCom(OtherNodeInput$)
  368.                            ZCol = ZCol + 1
  369.                            IF (ZCol > 65 AND OtherNodeInput$ = CHR$(32)) THEN
  370.                               CALL SkipLine(1)
  371.                              ZCol = 1
  372.                            END IF
  373.                         END IF
  374.                         TrueChatIndexHold(LineIndex) = TrueChatIndexHold(LineIndex) + 1
  375.                         IF TrueChatIndexHold(LineIndex) > 72 THEN TrueChatIndexHold(LineIndex) = 1
  376.  
  377.                      END IF
  378.                   END IF
  379.                END IF
  380.             NEXT
  381.  
  382. REM *************************************************************************
  383. REM *******Get text from local user (local, as in, this node of RBBS)********
  384. REM *******Also local, as in.. SysOp                                 ********
  385. REM *************************************************************************
  386.  
  387. ' ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect 'Pe 01/21/92
  388.             CALL FindFKey                ' will also get local key pressed
  389.             IF ZSubParm < 0 THEN
  390.                EXIT DO
  391.             END IF
  392.  
  393.             Key$ = ""
  394.             IF NOT ZLocalUser THEN
  395.                CALL EOFComm (Char%)
  396.               ELSE
  397.                Char% = -1
  398.             END IF
  399.             IF Char% <> -1 THEN          'if remote key in then get it
  400.                CALL GetCom(Key$)
  401.               ELSE
  402.                Key$ = ZKeyPressed$       'INKEY$ is performed in FindFKey
  403.             END IF
  404.             IF Key$ <> "" THEN
  405.                IF LEN(Key$) = 1 THEN
  406.                   IF Key$ = ZEscape$ OR Key$ = CHR$(17) THEN
  407.                      CALL ChatCommand(ChatSubParm, CurrentNodeIndex, Zmaxnodes)
  408.                      IF ChatSubParm THEN
  409.                         EXIT DO
  410.                      END IF
  411.                    ELSE
  412.                      CALL LockIt9(CurrentNodeIndex, ZTrue)
  413.                      TempChatInput$ = ChatInput$
  414.                      TempTrueChatIndex = CVI(TrueChatIndex$)
  415.                      MID$(TempChatInput$, TempTrueChatIndex, 1) = Key$
  416.                      LSET ChatInput$ = TempChatInput$
  417.                      TempTrueChatIndex = TempTrueChatIndex + 1
  418.                      IF TempTrueChatIndex > 72 THEN
  419.                         TempTrueChatIndex = 1
  420.                      END IF
  421.                      LSET TrueChatIndex$ = MKI$(TempTrueChatIndex)
  422.                      CALL LockIt9(CurrentNodeIndex, ZFalse)
  423.                      IF Key$ <> CHR$(8) THEN
  424.                         IF ZWasGR = 2 AND Key$ <> ZCarriageReturn$ THEN
  425.                            Key$ = ZEmphasizeOff$ + Key$
  426.                         END IF
  427.                         CALL QuickTPut(Key$, 0)
  428.                       ELSE
  429.                         CALL LPrnt(ZLocalBkSp$, 0)
  430.                         IF (NOT ZLocalUser) AND SendRemote THEN
  431.                            CALL PutCom (ZBackSpace$)
  432.                         END IF
  433.                         ZCol = ZCol - 2
  434.                      END IF
  435.                      IF Key$ = ZCarriageReturn$ THEN
  436.                         IF SendRemote AND ZLineFeeds THEN
  437.                            CALL PutCom(ZLineFeed$)
  438.                         END IF
  439.                         ZCol = 0
  440.                      END IF
  441.                      ZCol = ZCol + 1
  442.                   END IF
  443.                   REM ** Reset auto log-off timeski..
  444. '                  ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  445.                END IF
  446.             END IF
  447.  
  448.             REM ** I'll call the below.. pseudo-wordwrap.. or a way to
  449.             REM ** get around having to do word wrap.. it ain't easy in
  450.             REM ** char by char mode... Much easier in C than in BASIC
  451.  
  452.             IF (ZCol > 72) OR (ZCol > 65 AND Key$ = CHR$(32)) THEN
  453.                CALL SkipLine(1)
  454.                ZCol = 1
  455.             END IF
  456.  
  457.             CALL CheckCarrier
  458.             IF ZSubParm = -1 THEN
  459.                EXIT DO
  460.             END IF
  461.  
  462. '            CALL CheckTimeRemain(MinsRemaining)
  463. '            IF ZSubParm = -1 THEN
  464. '               EXIT DO
  465. '            END IF
  466. '              CALL CheckTime(ZAutoLogoff!, Remain!, 1)  'Pe 01/21/92
  467. '                IF Remian! < 0 THEN
  468. '                 ZWaitExpired = ZTrue
  469. '               EXIT DO
  470. '             END IF
  471.  
  472.          LOOP
  473.          CALL LockIt9 (CurrentNodeIndex, ZTrue)
  474.          LSET ChatInput$ = SPACE$(72)
  475.          LSET ChatActivity$ = "I"
  476.          LSET InTrueChat$ = "I"
  477.          CALL LockIt9 (CurrentNodeIndex, ZFalse)
  478.          IF HasPaged > 0 THEN
  479.             CALL LockIt9 (HasPaged, ZTrue)
  480.             IF ChatActivity$ = "R" THEN
  481.                LSET ChatActivity$ = "I"
  482.                CALL LockIt9 (HasPaged, ZFalse)
  483.             END IF
  484.          END IF
  485.          CLOSE 9
  486.  
  487.          CLOSE 2
  488.          ZActiveMessageFile$ = WasA1$
  489.  
  490.          ERASE TrueChatIndexHold    'free memory taken by integer array
  491.  
  492.       END IF
  493.  
  494.       EXIT SUB
  495.  
  496. * REPLACING old line(s) by new
  497. 59840 GET 1, (LineIndex + 1)
  498.       IF MID$(ZMsgRec$, 55, 2) = "-1" AND NOT ZSysop THEN
  499.          NameTemp$ = "SYSOP"
  500.        ELSE
  501.          NameTemp$ = MID$(ZMsgRec$, 1, 26)
  502.       END IF
  503.       CALL TrimTrail (NameTemp$," ")
  504.       CALL NameCaps(NameTemp$)
  505.       RETURN
  506.  
  507.       END SUB
  508. * ------[ first line different ]------
  509. * REPLACING old line(s) by new
  510. 59910 SUB SaveUserActivity(Activity$, NodeRecordIndex, ReadIt) STATIC
  511.  
  512.       ChatNodeIndex = NodeRecordIndex - 1
  513.  
  514.       CLOSE 9
  515. * ------[ first line different ]------
  516.       CALL OpenWrk9 (ZChatFileName$)
  517.       CALL Field9
  518.  
  519.       IF ReadIt THEN
  520.          CALL LockIt9(ChatNodeIndex, ZTrue)
  521.          Activity$ = BBSActivity$
  522.        ELSE
  523.          CALL LockIt9(ChatNodeIndex, ZTrue)
  524.          LSET BBSActivity$ = Activity$
  525.          CALL LockIt9(ChatNodeIndex, ZFalse)
  526.       END IF
  527.  
  528.       IF NOT ReadIt THEN
  529.          CLOSE 9
  530.       END IF
  531.  
  532.       END SUB
  533.  
  534. REM **
  535. REM ** Chat command line mode.. this is where they can do certain functions
  536. REM ** pertaining to the chat
  537. REM **
  538. REM ** ChatSubParm is returned TRUE when a user wishes to exit the chat mode
  539.  
  540. * REPLACING old line(s) by new
  541. * ------[ first line different ]------
  542. 59920 SUB ChatCommand(ChatSubParm, CurrentNodeIndex, Zmaxnodes) STATIC
  543.  
  544.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  545.       SHARED NodesToSquelch$
  546.  
  547.       CALL SkipLine(1)
  548. * REPLACING old line(s) by new
  549. * ------[ first line different ]------
  550. 59922 ZFileName$ = "CHAT.MNU"    'Pe 01/27/92
  551.        CALL Graphic (ZFileName$) ' Pe 01/27/92  
  552.        CALL BufFile(ZFileName$, X) 'Pe 01/27/92
  553.       END IF
  554.       ZOutTxt$ = "CHAT command "
  555.  
  556.  IF ZExpertUser THEN
  557.          ZOutTxt$ = ZOutTxt$ + "[C],H,W,Q,X,P"
  558.        ELSE
  559.          ZOutTxt$ = ZOutTxt$ + "[C]hat,H)elp,W)ho,Q)uit,X)pert,P)age"
  560.          END IF
  561.       ZSubParm = 1
  562.       CALL TGet
  563.       IF ZSubParm = -1 THEN
  564.          GOTO 59940
  565.       END IF
  566.       ChatSubParm = ZFalse
  567.       IF ZWasQ > 0 THEN
  568.          CALL AllCaps(ZUserIn$(1))
  569.          SELECT CASE LEFT$(ZUserIn$(1), 1)
  570.  
  571.             CASE "C"    REM ** Return to chat mode
  572.                EXIT SUB
  573.  
  574.             CASE "H", "?" REM ** Help.. means show the Chat menu
  575.                GOTO 59922
  576.  
  577.             CASE "W"    REM ** Show whos on the system
  578.                CALL PageEm(CurrentNodeIndex, Zmaxnodes, ZTrue)
  579.                GOTO 59921
  580.  
  581.             CASE "Q"    REM ** Quit/Exit out of chat mode
  582.                ChatSubParm = ZTrue
  583.                EXIT SUB
  584.  
  585.             CASE "X"    REM ** Toggle expert mode
  586.                CALL Toggle(9)
  587.                GOTO 59921
  588.  
  589.             CASE "P"    REM ** Page another node to chat
  590.                IF NOT DoTrueChat THEN
  591.                   CALL PageEm(CurrentNodeIndex, Zmaxnodes, ZFalse)
  592.                   IF HasPaged = -1 THEN
  593.                      ChatSubParm = ZTrue
  594.                      EXIT SUB
  595.                   END IF
  596.                END IF
  597.                GOTO 59921
  598.  
  599.             CASE ELSE   REM ** Illegal command entered.. show menu..
  600.                CALL QuickTPut1("Unknown command <" + LEFT$(ZUserIn$(1), 1) + ">")
  601.                GOTO 59922
  602.  
  603.          END SELECT
  604.       END IF
  605.       EXIT SUB
  606.  
  607.       REM ** user dropped carrier.. return in a way to abort chat mode
  608. * DELETING old line(s)
  609. 59930
  610.